#!/usr/local/bin/python3
# -*- coding: utf-8 -*-

"""
@File    : RedPrint.py
@Author  : lepal
@Time    : 2024-03-01 14:19
"""


class RedPrint:
    def __init__(self, name):
        self.name = name
        self.mound = []  # 对应route的方法和其他参数

    # 需要实现的类似蓝图的 路由方法
    def route(self, rule, **options):
        def decorator(f):
            self.mound.append((f, rule, options))
            return f
        return decorator

    # 在 v1.__init.py__ 中用到的，类似蓝图注册的方法
    def register(self, bp, url_prefix=None):
        for f, rule, options in self.mound:
            # 如果url_prefix不存在/或者没传，就默认是模块的名字, 这样在 v1/__init__.py的create_blueprint_v1方法中 user.api.register(bp_v1, url_prefix='/user') 就可以写成 user.api.register(bp_v1)
            if url_prefix is None:
                url_prefix = '/' + self.name

            # endpoint = options.pop('endpoint', f.__name__)
            # 在对模块进行权限添加的时候用到了， 添加上红图的名称 当做是模块的名称
            endpoint = self.name + '+' +  options.pop('endpoint', f.__name__)
            bp.add_url_rule(url_prefix + rule, endpoint, f, **options)
